package com.wjx.demo.`class`

class Person {
    var name: String = "zhangsan"
        get() = field.toUpperCase()  //(后端变量) 机制,备用字段使用field关键字声明,field 关键词只能用于属性的访问器
        set
    var age: Int = 10
        set(value) {
            if (value > 10) {
                field = 10
            } else {
                field = value
            }
        }
    var no = 1
        private set
}

//非空属性必须在定义的时候初始化,kotlin提供了一种可以延迟初始化的方案,使用 lateinit 关键字描述属性：
class LazyProperty(val initializer: () -> Int) {
    var value: Int? = null
    val lazy: Int
        get() {
            if (value == null) {
                value = initializer()
            }
            return value!!
        }
}

fun main(args: Array<String>) {
    var person = Person()
    println(person.name)
    person.age = 100
    println(person.age)
    println(person.no)
}